{{tag>Dapper réseau tutoriel}}

----

====== Mise en place d'un proxy Squid avec authentification Active Directory ======

Ce tutoriel présente l'installation du proxy Squid avec authentification transparente des utilisateurs d'Active Directory.
L'intérêt premier est que les utilisateurs d'Active Directory seront authentifiés directement depuis leurs sessions Windows en cours et n'auront donc plus à saisir d'identifiants et mots de passe pour accéder à Internet.

Ce tutoriel montrera dans un premier temps comment rejoindre le domaine Active Directory, puis l'installation et la configuration de Squid. Il présentera ensuite Webmin, un outil permettant d'administrer Squid (à distance ou non) et de visionner les logs.
<note>
  * Testé et approuvé sur une Ubuntu 6.06 LTS Server (Dapper Drake).
  * Veillez à respecter la casse lors de la configuration des fichiers.
  * Sauvegarder chaque fichier avant modification : ''sudo cp fichier fichier.bak'' (pour restaurer ''sudo cp fichier.bak fichier'').
</note>



===== Pré-requis =====

  * Un réseau Windows ;
  * un contrôleur de domaine sous Windows 2003 Server ;
  * un domaine Active Directory ;
  * une machine (ici sous Ubuntu 6.06 Server) pour Squid.
  * avoir le dépôt universe activé (pour kerberos).

===== Intégration de la machine au domaine =====

Pour cela, nous donnerons des noms à certains éléments comme suit :
  * Le nom du domaine, s'appelera ici **domainead.local** ;
  * Le nom du DC (Contrôleur de domaine), s'appelera ici **dcad** ;
  * Le compte administrateur du DC, s'appelera ici **Administrateur** ;
  * Le nom de la machine Squid s'appelera ici **nom_machine** ;
qui devront évidement être remplacés par les valeurs exactes.


==== Installation des paquets nécessaires ====

Pour rejoindre le domaine, il va falloir [[:tutoriel:comment_installer_un_paquet|installer les paquets]] **samba krb5-user libpam-krb5 ntpdate winbind**.
  * ''samba'' servira à faire le lien entre des machines Linux et Windows ;
  * ''krb5-user'' et ''libpam-krb5'' sont les librairies liées à Kerberos, le protocole d'authentification utilisé par Active Directory ;
  * ''ntpdate'' permet de synchroniser les horloges machines pour Kerberos ;
  * ''winbind'' est le composant de samba communiquant avec Active Directory.

Lors de l'installation, il se peut que Kerberos demande le  nom des KDC //(Kerberos Domain Controler)//, qui est généralement le nom du DC :

''Serveurs kerberos du domaine : dcad''

''Serveur administratif: dcad''


==== Synchronisation de l'heure locale ====

Kerberos nécessite que l’heure locale soit synchronisée avec celle de votre DC :

  sudo ntpdate ip_DC

Pour vérifier l'heure :

  date



==== Configuration de Kerberos ====

[[:tutoriel:comment_editer_un_fichier|Éditer le fichier]] **/etc/krb5.conf** et n'y mettre **que** le contenu suivant :

<file>
[libdefaults]
        default_realm = DOMAINEAD.LOCAL
        clock_skew = 300
        ticket_lifetime = 24000
        default_tkt_enctypes = des3-hmac-sha1 des-cbc-crc
        default_tgs_enctypes = des3-hmac-sha1 des-cbc-crc
        dns_lookup_realm = false
        dns_lookup_kdc = true

[realms]
        DOMAINEAD.LOCAL = {
                kdc = dcad
                admin_server = dcad
                default_domain = DOMAINEAD.LOCAL
                }
[domain_realm]
        .domainead = DOMAINEAD
        domainead = DOMAINEAD
</file>

Puis tester vos paramètres Kerberos en lançant la commande :

  sudo kinit Administrateur

et entrer le mot de passe du compte administrateur du DC.

Si cela ne fonctionne pas, réessayer avec le nom complet ''Administrateur@DOMAINEAD.LOCAL''.

Pour voir les tickets Kerberos en cache :

  sudo klist


==== Configuration de Samba ====

Avant de procéder à cette étape, arrêter temporairement les services Winbind et Samba :

  sudo /etc/init.d/winbind stop
  sudo /etc/init.d/samba stop

[[:tutoriel:comment_editer_un_fichier|Éditer le fichier]] **/etc/samba/smb.conf**, et n'y mettre **que** le contenu suivant :

<file>
[global]
   workgroup = domainead
   realm = DOMAINEAD.LOCAL
   security = ads
   encrypt passwords = yes

   password server = dcad.domainead.local

   idmap uid = 10000-20000
   idmap gid = 10000-20000
   winbind enum groups = yes
   winbind enum users = yes
   winbind use default domain = yes
</file>

Ensuite, redémarrez les services Samba et Winbind :

  sudo /etc/init.d/samba start
  sudo /etc/init.d/winbind start


==== Rejoindre le domaine ====

Rejoindre le domaine avec la commande suivante :

  sudo net join -U Administrateur

== Erreurs éventuelles ==

  * Si vous obtenez le message suivant :

> The workgroup in smb.conf does not match the short domain name obtained from the server.
> Using the name [AUTRE_DOMAINE] from the server.
> You should set "workgroup = AUTRE_DOMAINE" in smb.conf

Alors [[:tutoriel:comment_editer_un_fichier|modifier]] votre **/etc/samba/smb.conf** comme dit, puis redémarrer les services Samba et Winbind et recommencer.

  * Si vous récupérez l’erreur suivante :

> ads_connect: No logon servers

C’est que vous n’avez pas installé ou démarré Winbind.

== Tests ==

Effectuer des tests afin de voir si tout s’est déroulé correctement :

  sudo net ads testjoin

devrait retourner ''Join is OK''.

Afficher la liste des groupes d'Active Directory :

  sudo wbinfo -g

Afficher la liste des utilisateurs d'Active Directory :

  sudo wbinfo -u

Si cela ne fonctionne pas, vérifier votre ''smb.conf'' et redémarrer vos services Samba et Winbind.
Vous devrez redémarrer winbind à chaque modification du ''smb.conf''.

<note tip>
À ce stade, **votre machine a rejoint le domaine Active Directory**.
</note>


===== Installation et configuration de Squid =====


==== Installation de Squid ====

[[:tutoriel:comment_installer_un_paquet|Installez le paquet]] **squid**.

Si après l'installation vous obtenez ''[fail]'' lors du démarrage de Squid, ceci sera réglé plus tard.

Tester la connexion au DC, qui devrait être fonctionnelle avec ce que nous avons fait avant :

  sudo /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic

Et rentrer un login/mdp d'un utilisateur d'Active Directory comme ceci :

  utilisateur mot_de_passe

Cela devrait retourner ''OK'' (Ctrl--C pour quitter).




==== Configuration de Squid ====

[[:tutoriel:comment_editer_un_fichier|
Éditez le fichier]] **/etc/squid/squid.conf** de configuration de Squid,

  * dans la partie **''TAG: auth_param''**, commenter tout (si ce n'est pas déjà fait) et n'ajouter **que** les lignes suivantes :<file>
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 5

auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Squid AD
auth_param basic credentialsttl 2 hours
</file>

<note help>**N.B. :** ''Squid AD'' représente juste la désignation du domaine utilisé par l'explorateur.</note>

Pour n'autoriser le surf qu'à un groupe d'Active Directory spécifique, rajouter le paramètre ''require-membership-of'' au programme //ntlm_auth// comme ceci :

<file>
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp --require-membership-of=DOMAINEAD\\groupead

auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic --require-membership-of=DOMAINEAD\\groupead
</file>

Éventuellement, ''DOMAINEAD'' devra être remplacé par la valeur de ''workgroup'' du ''smb.conf''.
''groupead'' étant le groupe d'Active Directory pouvant surfer.
Vous pouvez aussi remplacer ''groupead'' directement par son SID.

  * Dans la partie **''TAG: acl''**, rajouter la ligne suivante :

  acl ntlm proxy_auth REQUIRED

  * Puis dans la partie **''TAG: http_access''**, ne mettre **que** :

  http_access allow ntlm

  * Enfin, puisque nous sommes sur un domaine Microsoft, nous avons besoin que les noms NETBIOS courts soient reconnus : en effet, Squid n’utilise pas le champ ''search'' du fichier ''/etc/resolv.conf''.
Pour cela, utiliser le champ ''append_domain'' de la partie **''TAG: append_domain''** :

  append_domain .domainead.local

  * Pour ne pas inclure l'adresse IP ou le nom du système dans les requêtes HTTP, dans la partie **''TAG: forwarded_for''**, décommenter et modifier la ligne comme suit :

  forwarded_for off

Enfin, relancer Squid :

  sudo /etc/init.d/squid restart

Si vous récupérez ''[fail]'' lors du redémarrage de Squid, alors il faut spécifier le nom de la machine dans ''squid.conf'', dans la partie **''TAG: visible_hostname''** :

  visible_hostname nom_machine

Redémarrer à nouveau Squid.

==== Droits de l'utilisateur de Squid ====

L'utilisateur //proxy// de Squid nécessite d'appartenir au groupe //root// pour bénéficier des droits nécessaires sur les fichiers de log de Squid, afin de rendre l'authentification fonctionnelle :

Changer le propriétaire des fichiers log de Squid :

  sudo chown -R proxy:root /var/log/squid

Changer le groupe du cache de Squid :

[[:tutoriel:comment_editer_un_fichier|Éditer le fichier]] /etc/squid/squid.conf,

Dans la partie **''TAG: cache_effective_group''**, décommenter la ligne et y mettre le groupe //root// :

  cache_effective_group root

Redémarrer Squid :

  sudo /etc/init.d/squid restart

<note tip>
Votre proxy est désormais fonctionnel, vous pouvez tester l'authentification transparente depuis une machine du domaine après réglage du navigateur (Squid écoute sur le port 3128).
</note>



===== Webmin =====

[[:Webmin]] est un panel d'administration web pour votre serveur ou machine Linux. Il permet de gérer le système, administrer les serveurs installés, etc.

=== Installation ===

Webmin n'étant pas dans les dépôts, il faut télécharger le fichier « .deb » d'installation de Webmin depuis leur site :

  cd /tmp
  wget http://prdownloads.sourceforge.net/webadmin/webmin_1.380_all.deb

[[:tutoriel:comment_installer_un_paquet|Installer]] les dépendances de webmin : **libauthen-pam-perl** **libio-pty-perl** **libmd5-perl**.

Puis [[http://doc.ubuntu-fr.org/tutoriel/comment_installer_un_paquet#paquet_.deb_telecharge|installer]] le paquet téléchargé :

  sudo dpkg -i ~/webmin_1.380_all.deb

=== Connexion ===

Pour administrer sa machine depuis Webmin, ouvrir un navigateur **qui ne passe pas par ce proxy** et y taper l'adresse :

  https://nom_machine:10000/

(''nom_machine'' peut être remplacé par l'IP de la machine)

Vous pouvez vous y connecter avec vos identifiants/mots de passe habituels.

=== Administration de Squid ===

Pour administrer Squid, dérouler le menu //servers// puis //Squid Proxy Server//. Pour plus d'informations sur le module d'administration de Squid, regarder directement la [[http://doxfer.com/Webmin/SquidProxyServer|doc du site de Webmin]] (en).

=== Visionnement des logs ===

Trois principaux //log viewers// sont diponibles et consultables depuis Webmin : //SARG//, //Calamaris// et //Webalizer//.

Au choix, [[:tutoriel:comment_installer_un_paquet|installer l'un des paquets]] **sarg** **calamaris** **webalizer**.

Dans l'interface Webmin, vous pouvez configurer et générer des rapports Squid //via// :
  * Calamaris : //Servers -> Squid Proxy Server -> Calamaris Log Analysis//.
  * SARG : //Servers -> Squid Analysis Report Generator//.
  * Webalizer : //Servers -> Webalizer Logfile Analysis//.

Webalizer nécessite un dossier, à indiquer dans Webmin, dans lequel il enregistrera les rapports générés. Créer donc un dossier ''webalizer'' dans le dossier personnel :

  mkdir ~/webalizer

<note>
Il est déconseillé d'utiliser plusieurs log viewers, cela entraine des manipulations supplémentaires sur les fichiers de log.
</note>

----

//Contributeurs : [[:utilisateurs:v0n]].//